/**
 * 
 */
package br.com.sguc.sessionBean;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;


import br.com.sguc.entidade.Anuncio;
import br.com.sguc.entidade.Usuario;
import br.com.sguc.interfaces.AnuncioRemote;

/**
 * @author Jonas Nadolny - 06/10/2013
 *
 */
@Stateless
public class AnuncioSessionBean implements AnuncioRemote {

	@PersistenceContext
	private EntityManager em;
	
	/* (non-Javadoc)
	 * @see br.com.sguc.interfaces.AnuncioRemote#salvar(br.com.sguc.entidade.Anuncio)
	 */
	@Override
	public void salvar(Anuncio anuncio) {
	
		em.merge(anuncio);
		
	}

	/* (non-Javadoc)
	 * @see br.com.sguc.interfaces.AnuncioRemote#listarAnuncios()
	 */
	@Override
	public List<Anuncio> listarAnuncios(Anuncio anuncio) {
		
		List<Anuncio> list = new ArrayList<>();
		List<Usuario> listUsuario = new ArrayList<>();
		
		try{
			
			String nomeFantasia = (anuncio.getUsuario().getNomeFantasia() != null)? "%" + anuncio.getUsuario().getNomeFantasia() + "%" : "%%";
			String cidade = (anuncio.getUsuario().getCidade() != null)? "%" + anuncio.getUsuario().getCidade() + "%" : "%%";
			String uf = (anuncio.getUsuario().getUf() != null)? "%" + anuncio.getUsuario().getUf() + "%" : "%%";
			String titulo = (anuncio.getTituloAnuncio() != null)? "%" + anuncio.getTituloAnuncio() + "%" : "%%";
			

			TypedQuery<Usuario> query = em.createQuery("select e1 from Usuario e1 where nome_fantasia like '" + nomeFantasia + "' and cidade like '" + cidade + "' and uf like '" + uf + "'", Usuario.class);
			listUsuario = query.getResultList();
			
			if (listUsuario != null){
			
				String ids = "";
				int x = 1;
				for (Usuario usuario : listUsuario) {
					ids += "'" + usuario.getIdUsuario() + "'";
					
					if(x != listUsuario.size()){
						ids += ", ";
					}
					x++;
					
				}
				TypedQuery<Anuncio> query1 = em.createQuery("select a1 from Anuncio a1 where  titulo_anuncio like '" + titulo + "' and id_usuario in (" + ids + ") and status = '1'",  Anuncio.class);
				list = query1.getResultList();
				
			}
			else {
				
				TypedQuery<Anuncio> query1 = em.createQuery("select a1 from Anuncio a1 where  titulo_anuncio like '" + titulo + "' and status = '1'",  Anuncio.class);
				list = query1.getResultList();
			}
			
			
		} catch (Exception e) {
		}
		return list;
	}


	/* (non-Javadoc)
	 * @see br.com.sguc.interfaces.AnuncioRemote#cadastrarAnuncio(br.com.sguc.entidade.Anuncio)
	 */
	@Override
	public void cadastrarAnuncio(Anuncio anuncio) {
		
		em.persist(anuncio);
		
	}

	/**
	 * Busca apena o anuncio cadastrado pelo cliente.
	 */
	@Override
	public Anuncio buscarAnuncio(int idUsuario) {
		
		Anuncio anuncio = null;

		try {
		
		TypedQuery<Anuncio> query = em.createQuery("select a1 from Anuncio a1 where  id_usuario = '"+ idUsuario +"'", Anuncio.class);

		anuncio = query.getSingleResult();

		} catch (EJBException e) {
			e.printStackTrace();
		} catch (Exception e) {
			// TODO: handle exception
		}
		return anuncio;
	}

}
